#pragma once
#include "ASN1Sequence.h"
#include "ASN1ObjectIdentifier.h"
#include "PKCSContent.h"
#include "CertificateGenerator.h"
#include "PKCSCertificateSet.h"

namespace AppliedCryptography
{
	class PKCSSignedData : public PKCSContent
	{
	protected:
		ASN1ObjectIdentifier* _oid;
		ASN1Sequence* _content;
		CertificateGenerator* _cg;
		ASN1Integer* _cmsVers;
		ASN1Set* _digestAlgorithms;
		ASN1Sequence* _encapContentInfo;
		PKCSCertificateSet* _certificates;
		ASN1Set* _signerInfos;
		ASN1ObjectIdentifier* _encapsContentType ;

	public:
		PKCSSignedData();
		~PKCSSignedData();

	public:
		virtual ASN1ObjectIdentifier& getPKCSContentType() const;
		virtual ASN1Encodable& getPKCSContent() const;
		virtual PKCSSignedData& setCertificate(CertificateGenerator& cg);
		virtual CertificateGenerator& getCertificate() const;
	};
}; // namespace AppliedCryptography
